#include <stdio.h>
#include <stdlib.h>
#include "queue_base_list.h"
//创建队列
QUEUE *queue_create(void){
	QUEUE *queue = malloc(sizeof(QUEUE));
	queue -> front = NULL;
	queue -> back = NULL;
	return queue;
	}
QUEUE_NODE *node_destroy(QUEUE_NODE *node);
//清空队列
void queue_clear(QUEUE *queue){
	while(queue -> front){
		queue -> front = node_destroy(queue -> front);
		}
	queue -> back = NULL;
	}
//销毁队列
void queue_destroy(QUEUE *queue){
	//清空队列，使其为空队列
	queue_clear(queue);
	free(queue);
	}
//创建节点
QUEUE_NODE *node_create(int data){
	QUEUE_NODE *node = malloc(sizeof(QUEUE_NODE));
	node -> data = data;
	node -> next = NULL;
	return node;
	}
//入队函数
void queue_push(QUEUE *queue,int data){
	//1、malloc节点并赋值
	QUEUE_NODE *node = node_create(data);	
	//2、调整老队尾的next的值
	//2.1、如果队列为空 back = NULL;
	if(queue -> back == NULL){
		queue -> back -> next = node;
		}
	//3、判断是否要调整front back
	queue -> back = node;
	//3.1、如果队列为空时第一个节点进来，其既是队头，也是队尾
	if(queue -> front == NULL){//原来位空队列
		queue -> front = node;
		}
	}
QUEUE_NODE *node_destroy(QUEUE_NODE *node){
	QUEUE_NODE *next = node -> next;//即将成为队头节点的地址
	free(node);
	return next;
	}
//出队函数
int queue_pop(QUEUE *queue){
	/*1、返回队头的data 域*/
	int data = queue -> front -> data;
	//2、释放队头节点
	//调整front 指向新的队头
	queue -> front = node_destroy(queue -> front);
	//当出队队列中的最后一个节点时，要调整back
	if(queue -> front == NULL){
		queue -> back = NULL;
		}
	return data;
	}
//判空
int queue_empty(QUEUE *queue){
	if(queue -> front == NULL){
		return 1;
		}
		return 0;
	}
